#pragma once
#include "SFMLInclude.h"

//Uninitialized data sizes
//One sprite is 272 Bytes
//One texture is 32 Bytes

class Entity
{
private:
	sf::Vector2f Position;
	sf::Vector2f Velocity;
	sf::Sprite *MainSprite;
	sf::Texture *MainTexture;
	float Angle;
	float Rotation; //Degrees per sec.

	sf::RenderWindow *MainWindow;

public:
	Entity();
	Entity(sf::Vector2f nPosition, sf::Vector2f nVelocity, float nAngle, float nRotation, std::string TexFileName, sf::RenderWindow *nWindow);
	Entity(sf::Vector2f nPosition, sf::Vector2f nVelocity, float nAngle, float nRotation, sf::Texture* EntityTexture, sf::RenderWindow *nWindow);
	~Entity();

	bool LoadTexture(std::string FileName);

	virtual void Update( float dt );
	virtual void Render( void );

	void SetAngle(float nAngle);
	void AddToAngle(float AddMe);

	void SetRotationalSpeed(float nRotation);
	void AddToRotationalSpeed(float nRotation);

	void SetPosition(float nX, float nY);
	void SetPosition(sf::Vector2f nPosition);
	void AddToPosition(float AddX, float AddY);
	void AddToPosition(sf::Vector2f AddMe);

	void SetVelocity(float nX, float nY);
	void SetVelocity(sf::Vector2f nVelocity);
	void AddToVelocity(float nX, float nY);
	void AddToVelocity(sf::Vector2f AddMe);

	//Getters
	sf::Vector2f GetPosition( void );
	sf::Vector2f GetVelocity( void );
	sf::Sprite* GetSprite( void );
	sf::Texture* GetTexture( void );
	float GetAngle( void );
	float GetRotation( void );
	sf::RenderWindow* GetRenderWindow( void );
};